/*针对本项目简单封装的通用事件方法*/

/*ajax统一处理*/
$.ajaxSetup({
	
	beforeSend:function(XMLHttpRequest){
		
	},
	//针对json字符串统一解密
	/* dataFilter:function(data,type){
		var result = "";
		if(isJsonStr(data)){
    		var encRes = JSON.parse(data);
    		if(encRes.enc){
    			var res = encRes.enc;
    			result = Base64.decode(res);
    		}else {
    			result = data;
    		}
    	}else{
    		result = data;
    	}
		return result;
	},*/
	error : function() {
		layer.open({
			title: '异常'
				,content: '网络异常'
		});
	},
    complete:function(XMLHttpRequest,textStatus){
    	//console.log(textStatus)
    	//console.log(XMLHttpRequest.status)
    	var res = XMLHttpRequest.responseText;
    	//console.log(res)
    	if(isJSON(res) || isJsonStr(res)){
    		var jsonData = JSON.parse(res);
    		//403未授权提示
	        if(jsonData.code == 403){
	        	layer.alert(jsonData.msg);
	        	return false;
	        }else if(jsonData.code == 408){
	         	 layer.alert("登录超时！请重新登录！",function(){
	         		 if (window.parent.window !== window) {
	         			 window.top.location = '/login';
	         		 }else{
	         			window.location.href = '/login';
	         		 }
	         	 })
	        }
    	}
      
    }
})


/*
 * 获取freemarker值，填充表单回显
 * 后端将表单回显数据通过freemarker映射到model中
 * $(".model").text()获取页面中model的值后，再通过layui.form对表单赋值
 * 用法：
 *  //接收回显
 * 	<div class="model" style="display: none">${model}</div>
 * 	//在其他控件渲染完成之后初始化表单
	initFormData();
 * */
function initFormData(){
	if ($(".model").length > 0) {
		var model = $(".model").text();
		//console.log(model)
		var json = isNotNull(model) ? JSON.parse(model) : "";
		layui.form.val('edit-form', json);
	}
}


/*table工具栏搜索查询(只适用于当前页面只有一个table的情况)
 * 用法：
 *   在搜索form表单中加入class属性table-search-form,
 *   在搜索按钮加入class属性table-search-btn,
 *   在table加上class属性table-datagrid
 * 	<form class="table-search-form">
 *    .....省略
 *  <div class="layui-inline">
		<button type="button" class="layui-btn table-search-btn">
			<i class="layui-icon layui-icon-search"></i>
		</button>
	</div>
	</form>
	<table class="layui-hide table-datagrid" id="loginLog-t"
	lay-filter="loginLog-t"></table>
 * */
$(".table-search-btn").click(function() {
	tableReload();
})

/* table重载(只适用于当前页面只有一个table的情况)
 * 使用方式与table工具栏搜索查询一样
 * */
function tableReload() {
	var searchData = $(".table-search-form").serializeObject();
	var id = $(".table-datagrid")[0].id
	layui.table.reload(id, {
		where : searchData,
		page : {
			curr : 1
		}
	});
};

 
/*页面刷新*/
function pageReload(){
	location.reload()
}

/*页面通用属性点击刷新页面*/
$(".refresh-btn").click(function() {
	location.reload();
});

/*异步获取数据
 * ajax获取数据的简单封装，延用ajax的参数
 * 默认post请求
 * 接收json格式参数，{"success":true,"code":200,"msg":"操作成功","data":{}}
 * 如果查询失败，则layer提示报错
 * 成功则将data结果作为函数返回值
 * 新增参数：
 *   successfunc：查询成功后执行的函数
 *   falsefunc：查询失败时执行的函数
 *   errorfunc：网络异常时执行的函数
 * 用法：
 *   var dict = ajaxQuery({
		 async: false
		,type: "get"
		,url: ctx+"/sys/common/dict"
	 })
 * */
function ajaxQuery(params){
	var resData = "";	
	//自定义处理函数
	var successfunc = params.successfunc;
	var falsefunc = params.falsefunc;
	var errorfunc = params.errorfunc;
	//默认配置
	var opitons = {
		type: 'post'
	   ,dataType : 'json'
	   ,success : function(res) {
			//console.log(res)
			if(res.success==false){
				layer.alert(res.msg);
				if(typeof falsefunc === "function")
				falsefunc();	
			}else{
				resData = res.data;
				if(typeof successfunc === "function")
				successfunc();	
			}
		}
	   ,error : function() {
			layer.alert( '网络异常！');
			if(typeof errorfunc === "function")
			errorfunc();	
		}
	}
	opitons = $.extend(true, opitons, params);
	//console.log(opitons)
	$.ajax(opitons);
	return resData;
}

/*异步提交数据
 * ajax提交数据的简单封装，延用ajax的参数
 * 默认post请求
 * 接收json格式参数，{"success":true,"code":200,"msg":"操作成功","data":{}}
 * layer显示操作结果
 * 新增参数：
 *   successfunc：查询成功后执行的函数
 *   falsefunc：查询失败时执行的函数
 *   errorfunc：网络异常时执行的函数
 * 用法：
 *  ajaxCommit({
		url : ctx + "/monitor/cache/delCacheKey",
		data: query,
		successfunc : function() {
			cacheKeyReload();
		}
	})
 * */
function ajaxCommit(params){
	var successfunc = params.successfunc;
	var falsefunc = params.falsefunc;
	var errorfunc = params.errorfunc;
	//默认配置
	var options = {
		type: 'post'
	   ,dataType : 'json'
	   ,success : function(res) {
			//console.log(res)
			if (res.success == false) {
				layer.open({
					  title: '系统异常'
					  ,content: res.msg
				});
				if(typeof falsefunc === "function")
				falsefunc();
			} else {
				layer.msg(res.msg, {
					offset : '150px',
					time : 2000,
					icon : 1
				});
				if(typeof successfunc === "function")
				successfunc();
			}
		}
	   ,error : function() {
			layer.open({
	  			  title: '异常'
	  			  ,content: '网络异常'
			});
			if(typeof errorfunc === "function")
			errorfunc();
		}
	}
	options = $.extend(true, options, params);
	//console.log(options)
	$.ajax(options);
}


/* 关闭弹出层 */
function closeIFrame(){
    var index = parent.layer.getFrameIndex(window.name);
    parent.layer.close(index);
}

function closePopup(){
    layer.closeAll();
	//layer.close(layer.index);
    //$(".layui-layer-close1").trigger('click');
}



 /*table列上鼠标悬浮显示文本
  * 在table字段中配合templet使用
  * */
function formatCellTooltip(value, row) {
	return "<span title='" + value + "'>" + value + "</span>";
}


/*打开新页面窗口时，获取弹出页面的内容*/
function getViewContent(url){
	  var content = "";
	  $.ajax({
		  async : false,
		  url : url,
		  success : function(res) {
			  if(res.msg){
				  content = "<p style='margin-left: 50px;margin-top: 30px'>" +
				  		"<a style='font-size:20px;color:#e60625'>"+res.msg+"</a></p>";
			  }else{
				  content = res;
			  }
		  }
	  ,error : function() {
		layer.msg('网络异常！');
	  }
	  });
	return content;
}


/*绑定提交按钮的表单提交，自动获取表单数据并校验
 * 对layui.form.on方法的简单封装
 * 用法：按照layui.form的格式编写html，提交按钮添加lay-filter属性
 *   <button type="button" class="layui-btn" lay-submit="" lay-filter="type-add" id="typeAddSave">保存</button>
 * 	  
 *   $("#typeAddSave").formSubmit({
	     url: ctx+"/sys/dictType/add"
      });
 * 
 * */
$.fn.formSubmit = function(params) {
var url = params.url
var layFilterId = $(this).attr("lay-filter");
var str = "submit(" + layFilterId + ")";
layui.form.on(str, function(data) {
	//var form = $(this).parents("form");
	//var serializeArray = form.serializeArray();
	$.ajax({
		type : 'post',
		url : url,
		data : data.field,
		dataType : 'json',
		success : function(res) {
			if (res.success == false) {
    			layer.open({
    				  title: '系统异常'
    				  ,content: res.msg
      			});
			} else {
				layer.msg(res.msg, {
					offset : '150px',
					time : 2000,
					icon : 1
				});
				setTimeout(function() {
					layer.closeAll();
				}, 1000);
			}
		},
		error : function() {
			layer.open({
	  			  title: '异常'
	  			  ,content: '网络异常'
			});
		}
	});
	return false;
});
}

/*下载excel
 * 用法：
 *   $("#export").click(function(){
		var searchData = $(".table-search-form").serializeObject();
		var url = ctx+"/sys/user/export";
		downloadExcel({url:url,data:searchData});
     })
 * 
 * */
function downloadExcel(params){
	var type = "POST"
	var url = params.url
	var data = params.data
	//原生ajax
	var xhr = new XMLHttpRequest();
	//post方式请求后台的路径
	xhr.open(type, url, true);
	//导出的Excel是二进制数据类型，所以设置为blob
	xhr.responseType = 'blob';
	//请求头（key,value），请求头可以设置多个key-value对
	xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
	//返回成功，导出的Excel文件
	xhr.onload = function () {
		if (this.status == 200) {
			var blob = this.response;
			var a = document.createElement('a');
			var url = window.URL.createObjectURL(blob);
			a.href = url;
			//取出文件名
			var filename = "";
			var disposition = this.getResponseHeader("Content-disposition");
			if (disposition && disposition.indexOf('attachment') !== -1) {
			      var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
			      var matches = filenameRegex.exec(disposition);
			      if (matches != null && matches[1]) { 
			          filename = matches[1].replace(/['"]/g, '');
			      }
			}
			//设置文件名
			a.download = decodeURI(filename);
			a.click();
		}else{
			layer.open({
  			  title: '异常'
  			  ,content: '网络异常'
			});
		}
	}
	//请求的参数，json格式，后台要用json格式接收
	xhr.send(JSON.stringify(data));
}



/*上传excel，对layui.upload的简单封装，传参跟upload一样
 * 新增参数 
 *   successfunc,
 *   falsefunc,
 *   errorfunc
 * 用法：
 *    uploadExcel({
	    elem: '#import'
	   ,url: ctx+"/sys/user/uploadExcel"
	   ,field: 'excelFile'
	   ,successfunc: function(){ tableReload(); }
      });
 * 
 * */
function uploadExcel(params){
	var successfunc = params.successfunc;
	var falsefunc = params.falsefunc;
	var errorfunc = params.errorfunc;
	var options = {
	     accept: 'file' 
		,exts: 'xls|xlsx'
        ,done: function(res){
        	if (res.success == false) {
    			layer.open({
    				  title: '系统异常'
    				  ,content: res.msg
    				  ,yes: function(index, layero){
    					  if(typeof successfunc === "function"){
    						  falsefunc();
    					  }
    					  layer.close(index);
    				  }
      			});

    		} else {
    			layer.open({
    				  title: '完成'
    				  ,content: res.msg
    				  ,yes: function(index, layero){
    					  if(typeof successfunc === "function"){
    						  successfunc();
    					  }
    					  layer.close(index);
    				  }
    			});

    		}
        }
        ,error: function(){
    		layer.open({
    			  title: '异常'
    			  ,content: '网络异常'
    			  ,yes: function(index, layero){
    				  if(typeof successfunc === "function"){
    					  errorfunc();
    				  }
    				  layer.close(index);
    			  }
    		});

        }
	}
	options = $.extend(true, options, params);
	var uploadInst = layui.upload.render(options);
	return uploadInst;
}
